﻿using System;
using System.Linq;
using System.ServiceModel.DomainServices.Client;
using System.Windows;
using System.Windows.Controls;
using AstekServis.Web.Data;

namespace AstekServis.Views
{
    public partial class Kapatma : ChildWindow
    {
        public int HareketID { get; set; }
        private bool _servisYonlendirme = false;
        public bool ServisYonlendirme { get { return _servisYonlendirme; } set { _servisYonlendirme = value; } }

        AsTekDomainContext context = new AsTekDomainContext();
        public Kapatma()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(Kapatma_Loaded);
        }

        void Kapatma_Loaded(object sender, RoutedEventArgs e)
        {
            if (ServisYonlendirme)
            {
                this.Title = "Servis Yönlendirme İşlemi";
                lblNeden.Visibility = System.Windows.Visibility.Collapsed;
                cmbNedenler.Visibility = System.Windows.Visibility.Collapsed;
                TeknisyenListesi();
            }
            else
            {
                this.Title = "Servis Kapatma";
                KapamaSebepleriListesi();
            }
        }

        private void KapamaSebepleriListesi()
        {
            EntityQuery<KapamaSebebi> qry = context.GetKapamaSebepleriQuery();
            LoadOperation<KapamaSebebi> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<KapamaSebebi> op = ss as LoadOperation<KapamaSebebi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    cmbNedenler.ItemsSource = op.Entities.Select(x => new KapamaSebebi { Adi = x.Adi, ID = x.ID }).ToList();
                    cmbNedenler.DisplayMemberPath = "Adi";
                    cmbNedenler.SelectedIndex = 0;
                    TeknisyenListesi();
                }
            };
        }

        private void TeknisyenListesi()
        {
            EntityQuery<Teknisyen> qry = context.GetTeknisyenlerQuery();
            LoadOperation<Teknisyen> operation = context.Load(qry);
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<Teknisyen> op = ss as LoadOperation<Teknisyen>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    cmbTeknisyenler.ItemsSource = op.Entities;
                    cmbTeknisyenler.DisplayMemberPath = "Adi";
                    cmbTeknisyenler.SelectedIndex = 0;
                }
            };
        }

        private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            LoadOperation<AracHareketi> operation = context.Load(context.GetAracHareketleriQuery().Where(x => x.ID == HareketID));
            operation.Completed += (ss, oo) =>
            {
                LoadOperation<AracHareketi> op = ss as LoadOperation<AracHareketi>;
                if (op.HasError)
                {
                    System.Windows.MessageBox.Show(op.Error.ToString(), "Load Error",
                    System.Windows.MessageBoxButton.OK);
                    op.MarkErrorAsHandled();
                }
                else
                {
                    AracHareketi arc = op.Entities.FirstOrDefault();
                    if (arc != null)
                    {
                        if (ServisYonlendirme)
                        {
                            arc.KapatanKullanici = -1;
                            arc.KapamaNedeniID = -1;
                            arc.KapanmaTarihi = new DateTime(1900, 1, 1);
                            arc.Durum = 0;
                            arc.OlusturulmaTarihi = DateTime.Now;
                            arc.OlusturanKullanici = Session.Instance.GetValue<Kullanici>("user").ID;
                            if (cmbTeknisyenler.SelectedIndex > -1)
                            {
                                Teknisyen tek = (Teknisyen)cmbTeknisyenler.SelectedItem;
                                arc.TeknisyenID1 = tek.ID;
                            }
                        }
                        else
                        {
                            if (cmbTeknisyenler.SelectedIndex > -1)
                            {
                                Teknisyen tek = (Teknisyen)cmbTeknisyenler.SelectedItem;
                                arc.KapatanKullanici = tek.ID;
                            }
                            arc.KapamaNedeniID = ((KapamaSebebi)cmbNedenler.SelectedItem).ID;
                            arc.KapanmaTarihi = DateTime.Now;
                            arc.Durum = 1;
                        }

                        context.SubmitChanges(so =>
                        {
                            if (so.HasError)
                                MessageBox.Show("Hata:\r\n" + so.Error.Message);
                            else
                            {
                                MessageBox.Show("Kaydedildi !");
                            }
                        }, null);
                    }
                }
            };
            this.DialogResult = true;
        }

        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }
    }
}

